home *** CD-ROM | disk | FTP | other *** search
- RULE Digital
- VAR noWires, high
- BEGIN
- IF cell[0] THEN (* does cell contain wire? *)
- noWires := cell[0] + cw[0] + ccw[0] + opp[0] (* yes, find number of wires *)
- IF noWires = 1 THEN
- high := opp[1] OR cw[1] OR ccw[1]
- ELSIF noWires = 2 THEN (* move signal along wire *)
- IF opp[0] THEN
- high := opp[1]
- ELSIF cw[0] THEN
- IF opp[1] THEN (* check for NOT gate *)
- high := cw[1] XOR 1 (* xor = not for single bits *)
- ELSE
- high := cw[1]
- END
- ELSIF ccw[0] THEN
- IF opp[1] THEN
- high := ccw[1] XOR 1
- ELSE
- high := ccw[1]
- END
- END
- ELSIF noWires = 3 THEN (* handle gates *)
- IF (opp = 2) OR (cw = 2) OR (ccw = 2) THEN
- high := (opp <> 1) AND (cw <> 1) AND (ccw <> 1)
- ELSE
- high := (opp = 3) OR (cw = 3) OR (ccw = 3)
- END
- ELSIF noWires = 4 THEN
- high := opp[1] (* handle cross-over *)
- END
- ELSE
- high := cell[1] (* signals off wire stay put *)
- END
- RETURN cell[0] + 2*high
- END